package com.zenithmind.version.service;

import com.zenithmind.version.pojo.vo.BranchVO;

/**
 * 分支操作服务接口 - 遵循接口隔离原则，专门处理分支的特殊操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BranchOperationService {

    /**
     * 合并分支
     * 
     * @param sourceBranchId 源分支ID
     * @param targetBranchId 目标分支ID
     * @param mergeMessage 合并消息
     * @return 是否成功
     */
    Boolean mergeBranch(String sourceBranchId, String targetBranchId, String mergeMessage);

    /**
     * 比较分支
     * 
     * @param sourceBranchId 源分支ID
     * @param targetBranchId 目标分支ID
     * @return 比较结果
     */
    String compareBranches(String sourceBranchId, String targetBranchId);

    /**
     * 获取分支差异统计
     * 
     * @param sourceBranchId 源分支ID
     * @param targetBranchId 目标分支ID
     * @return 差异统计信息
     */
    String getBranchDifference(String sourceBranchId, String targetBranchId);

    /**
     * 同步分支
     * 
     * @param branchId 分支ID
     * @param baseBranchId 基础分支ID
     * @return 是否成功
     */
    Boolean syncBranch(String branchId, String baseBranchId);

    /**
     * 重置分支到指定提交
     * 
     * @param branchId 分支ID
     * @param commitId 提交ID
     * @param resetType 重置类型（soft/mixed/hard）
     * @return 是否成功
     */
    Boolean resetBranch(String branchId, String commitId, String resetType);

    /**
     * 更新分支统计信息
     *
     * @param branchId 分支ID
     * @return 是否成功
     */
    Boolean updateBranchStatistics(String branchId);

    /**
     * 检查合并冲突
     *
     * @param sourceBranchId 源分支ID
     * @param targetBranchId 目标分支ID
     * @return 冲突信息
     */
    String checkMergeConflicts(String sourceBranchId, String targetBranchId);

    /**
     * 归档分支
     *
     * @param branchId 分支ID
     * @param isArchived 是否归档
     * @return 是否成功
     */
    Boolean archiveBranch(String branchId, Boolean isArchived);
}
